awk文本处理 shell脚本

一、awk文本处理

awk可以处理有格式的文本,可以指定分割的符号

提取冒号分割的第一部分

1
awk -F: '{print $1}' b.txt

提取第一部分并输出冒号分割的有几部分

1
awk -F: '{print $1,NF}' b.txt

输出冒号分割的第一部分和最后一部分

1
awk -F: '{print $1,$NF}' b.txt

显示第一部分的行号

1
awk -F: '{print NR,$1}' b.txt

定位前3行的第一部分内容内容

1
awk -F: 'NR<=3{print NR,$1}' b.txt

&&条件同时满足

1
awk -F: 'NR>=3 && NR <=5{print NR,$1}' b.txt

||或

1
awk -F: 'NR<=3 || NR >=5{print NR,$1}' b.txt

通过正则定位最后的单词并显示第一部分

1
awk -F: '/nologin$/{print $1}' b.txt

先定位第一部分$1~,找出第一部分中r开头t结尾的UID($3)

1
awk -F: '$1~/^r.*t$/{print $3}' b.txt^C

定位第三部分UID>=7并输出行号和第一部分的内容

1
2
awk -F: '$3>=7{print NR,$1}' b.txt

-v有变量要赋值,有多个变量,用多个-v

后期可以对count变量的值进行改变

1
2
count=7 赋值的时候不能有空格
awk -v x=$count -F: '$3>=x{print NR,$1,$4}' b.txt

找到第一组中是root,在’’中需要用“”进行区分

1
2
[root@test /]# awk -F: '$1=="root"{print NR,$1,$3}' b.txt
1 root 0

取IP地址

awk不指定符号,默认是空格,网卡IP信息是用空格分割的

1
2
3
4
5
ifconfig |awk 'NR==2{print $2}'
反引号代表取值
将结果赋值给ip_addr
echo $ip_addr取值并显示

排序、去掉重复行

1
cat a.txt |sort |uniq

cut

awk是一个复杂的工具,在这里只用了它的文本编辑功能,cut是一个精简的版本

1
cat /etc/passwd |cut -d: -f1,3

-d指定分割符是冒号,-f代表取的部分,取多个用逗号分开

find

1
find / -type f 查看根下的普通文件
1
2
3
4
5
find / -name "*.txt" 查看根下的txt文件
这里的文件名需要加双引号
或者
find 、-name \*.txt
1
find / -size +30M 查找大于30M的文件
1
find / -size +10M -size -30M 查找大于10M小于30M的文件
1
2
3
4
5
find / -size +20M -f -name *.txt
可以结合起来测试
```ymal
find / -name \*.txt -type f -size +10M

从文件夹中的文件中找内容

1
2
3
4
5
6
grep -rl 'root' /test
-r是递归找/test 下子文件,子文件夹下的子文件中的含有root的
-l找含有root的文件名

shell 脚本

修改主机名脚本

修改主机名的时候引入name变量,$name取变量名,文件命名xx.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
1. read -p "input your hostname" name
2. hostnamectl set-hostname $name
``
**修改完后一定要给给脚本文件添加可执行权限**
**chmod +x set-hostname.sh**
### 变量 ###
系统变量
全局变量
局部变量
### 测试文件 ###
test==[],在shell的判断中,用[]
使用man test查看帮助文档
#### 1 整数的比较 ####
INTEGER1 -eq INTEGER2
INTEGER1 is equal to INTEGER2 等于
INTEGER1 -ge INTEGER2
INTEGER1 is greater than or equal to INTEGER2 大于等于
INTEGER1 -gt INTEGER2
INTEGER1 is greater than INTEGER2 大于
INTEGER1 -le INTEGER2
INTEGER1 is less than or equal to 小于等于 INTEGER 2
INTEGER1 -lt INTEGER2 小于
INTEGER1 -ne INTEGER2 不等于
例如:
```ymal
[ 3 -lt 2 ]

echo $? 返回0代表执行成功 返回非零代表没有执行

方括号左右需要有空格

想要用符号用(())

1
2
((3>4))
echo $?

2 与或

EXPRESSION1 -a EXPRESSION2    逻辑与
       both EXPRESSION1 and EXPRESSION2 are true

EXPRESSION1 -o EXPRESSION2    逻辑或
       either EXPRESSION1 or EXPRESSION2 is true
1
2
[ 5 -gt 3 -a 5 -lt 3 ]
echo $? 返回1

2 比较字符串

字符串的比较

© 2018 Peter's Blog Center All Rights Reserved.
Theme by hiero